import axios from "axios";
import qs from "qs";
// 创建axios实例
let baseUrl =
  window.location.hostname === "www.liujunjun.top"
    ? "http://112.74.42.103"
    : "http://112.74.42.103";

const service = axios.create({
  baseURL: baseUrl, // node环境的不同，对应不同的baseURL
  timeout: 5000, // 请求的超时时间
  //设置默认请求头，使post请求发送的是formdata格式数据// axios的header默认的Content-Type好像是'application/json;charset=UTF-8',我的项目都是用json格式传输，如果需要更改的话，可以用这种方式修改
  headers: {
    "Content-Type": "application/x-www-form-urlencoded"
  }
  // changeOrigin: true,
  // withCredentials: true // 允许携带cookie
});
axios.defaults.withCredentials = true;

function checkStatus(response) {
  // loading
  // 如果http状态码正常，则直接返回数据
  // if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {
  //   return response
  //   // 如果不需要除了data之外的数据，可以直接 return response.data
  // }
  // // 异常状态下，把错误信息返回去
  // return {
  //   status: -404,
  //   msg: '网络异常'
  // }
  return response;
}

function checkCode(res) {
  // 如果code异常(这里已经包括网络错误，服务器错误，后端抛出的错误)，可以弹出一个错误提示，告诉用户
  if (res.status === -404) {
    // alert(res.msg)
  }
  if (res.data && !res.data.success) {
    // alert(res.data.error_msg)
  }
  return res;
}

//获取图片地址
function GetQueryString(name) {
  var search = document.location;
  //alert(search);
  var pattern = new RegExp("[?&]" + name + "=([^&]+)", "g");
  var matcher = pattern.exec(search);
  var items = null;
  if (null != matcher) {
    try {
      items = decodeURIComponent(decodeURIComponent(matcher[1]));
    } catch (e) {
      try {
        items = decodeURIComponent(matcher[1]);
      } catch (e) {
        items = matcher[1];
      }
    }
  }
  return items;
}
// 关闭浏览器就清空
let session = {
  set(key, value) {
    window.sessionStorage.setItem(key, JSON.stringify(value)); //设置指定key的数据（JSON格式）
  },
  get(key) {
    return JSON.parse(window.sessionStorage.getItem(key)); //获取指定key的数据
  },
  remove(key) {
    window.sessionStorage.removeItem(key); //删除指定key的数据
  },
  clear() {
    window.sessionStorage.clear(); //清空所有的存储数据
  }
};
// 长期
let local = {
  set(key, value) {
    window.localStorage.setItem(key, JSON.stringify(value)); //设置指定key的数据（JSON格式）
  },
  get(key) {
    return JSON.parse(window.localStorage.getItem(key)); //获取指定key的数据
  },
  remove(key) {
    window.localStorage.removeItem(key); //删除指定key的数据
  },
  clear() {
    window.localStorage.clear(); //清空所有的存储数据
  }
};
/**
 *  _this: 当前 this
 *  response: 返回的数据
 * successFn：成功回调
 * errorFn： 错误回调
 * showMsg：打印提示  默认为提示 =》 传 true 不显示
 * ***/
var httpSuccess = (_this, response, errorFn, successFn, showMsg) => {
  if (response.data.code) {
    if (!showMsg) {
      if (response.data.code >= 500) {
        _this.$message({
          message: response.data.message,
          type: "error"
        });
      } else {
        _this.$message({
          message: response.data.message,
          type: "warning"
        });
      }
    }
    if (errorFn && typeof errorFn === "function") {
      errorFn();
    }
  } else {
    if (!showMsg) {
      _this.$message({
        message: response.data.message,
        type: "success"
      });
    }
    if (successFn && typeof successFn === "function") {
      successFn(response.data);
    }
  }
};
// 表单错误提交
var formSubmit = (_this, formName, fn) => {
  _this.$refs[formName].validate(valid => {
    if (valid) {
      if (fn && typeof fn === "function") fn();
    } else {
      _this.$message({
        message: "有内容未填完无法提交！",
        type: "error"
      });
    }
  });
};

const http = {
  post(urlSrc, data) {
    return service({
      method: "post",
      url: urlSrc,
      data: qs.stringify(data)
    })
      .then(response => {
        console.log(response);
        return checkStatus(response);
      })
      .then(res => {
        console.log(res);
        return checkCode(res);
      });
  },
  get(urlSrc, params, _this) {
    return service({
      method: "get",
      url: urlSrc,
      params, // get 请求时带的参数
      timeout: 10000
    })
      .then(response => {
        if (!response.data.session.code && response.data.session.user) {
          _this.$store.state.userInfo = response.data.session.user;
        } else {
          _this.$store.state.userInfo = {
            admin: 0,
            username: ""
          };
        }
        return checkStatus(response);
      })
      .then(res => {
        return checkCode(res);
      });
  }
};
const saverFn = {
  GetQueryString,
  session,
  local,
  httpSuccess,
  formSubmit
};

export { http, saverFn };
